import abc
import torch


class Optimizer(abc.ABC, torch.optim.Optimizer):
    def __init__(self, model: torch.nn.Module):
        self.params = [
            {
                'params': model.encoder.parameters(),
                'lr': 1e-5,
            },
            {
                'params': model.decoder.parameters(),
                'lr': 1e-4,
            },
            {
                'params': model.auxiliary.parameters(),
                'lr': 1e-3,
            },
            {
                'params': model.activation.parameters(),
                'lr': 1e-3,
            },
            {
                'params': model.classify.simplify.parameters(),
                'lr': 1e-4,
            },
            {
                'params': model.classify.deep.parameters(),
                'lr': 3e-4,
                'weight_decay': 1e-4,
            },
            {
                'params': model.classify.attn.parameters(),
                'lr': 1e-4,
            },
            {
                'params': model.classify.mid.parameters(),
                'lr': 1e-4,
            },
            {
                'params': model.classify.dropout.parameters(),
                'lr': 1e-4,
            },
            {
                'params': model.classify.mapper.parameters(),
                'lr': 1e-3,
            },
            {
                'params': model.classify.active.parameters(),
                'lr': 1e-3,
            },
        ]
